-- store_mgr.lua

require ("core.Store")

StoreMgr = singleton()
local prop = property(StoreMgr)
prop:accessor("stores", {})
prop:accessor("curStore", nil)

function StoreMgr:__init()
end

function StoreMgr:get(name)
    return self.stores[name]
end

function StoreMgr:load(filename)
    local name = stdfs.filename(filename)
    if self.stores[name] then
        self:close(name)
    end
    print("[StoreMgr][load] filename:"..filename.." name:"..name)
    local store = Store(name)
    if store:load(filename) then
        self.curStore = store
        self.stores[name] = store
        g_event_mgr:notifyListener("onStoreLoad", store)
        return true
    end
end

function StoreMgr:swap(name)
    local store = self.stores[name]
    if store then
        self.curStore = store
        g_event_mgr:notifyListener("onStoreSwap", store)
    end
end

function StoreMgr:close(filename)
    local store = self.stores[filename]
    if store then
        store:close()
        local name = stdfs.filename(filename)
        self.stores[name] = nil
        if store == self.curStore then
            self.curStore = nil
            for _, vstore in pairs(self.stores) do
                self.curStore = vstore
                break
            end
            g_event_mgr:notifyListener("onStoreLoad", self.curStore)
        end
    end
end

g_store_mgr = StoreMgr()

